/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.domain.proceso.envio.carga;

import com.model.domain.persona.Hogar;
import com.model.domain.persona.HogarXml;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Rdelacruz
 */
public class ConjuntoReglasEnvioHogar {
    
    /*
    private final Map<String,ReglaEnvioHogar> mapReglasEnvioHogar = new HashMap<String,ReglaEnvioHogar>(); 
    private final List<ReglaEnvioHogar> reglasEnvioHogar = new ArrayList<ReglaEnvioHogar>();
    
    public ReglaEnvioHogar getReglaPara(RegistroXmlHogar regXml) {
        return mapReglasEnvioHogar.get(regXml.getKeyHogar());
    }
    
    public void addReglaEnvioHogar(ReglaEnvioHogar regla) throws Exception {     
        HogarXml hogarXml = regla.getHogarXml();
        //Hogar hogarBD = regla.getHogarBD();
        //regla.procesarResultado();
        mapReglasEnvioHogar.put(hogarXml.getKeyHogar(), regla);
        reglasEnvioHogar.add(regla);
    }   
    
    public Iterator<ReglaEnvioHogar> getReglasEnvioHogar() {
        return reglasEnvioHogar.iterator();
    }    
    */
    
    private static List<ReglaEnvioHogar> reglas = null;
    
    public static List<ReglaEnvioHogar> getReglas() {
        try {
            if(reglas==null) {
                reglas = new ArrayList<ReglaEnvioHogar>();

                for(int b=1; b<=7; b++) {                
                    //agregarRegla(null,b,getOpcionesPermitidasParaHogar(null,b));
                    agregarRegla(null,b);                
                }

                for(int a=1; a<=7; a++) {
                    for(int b=1; b<=7; b++) {
                        agregarRegla(a,b);
                    }
                }

                /*
                agregarRegla(1,null, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(2,null, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});

                agregarRegla(3,1, new Opcion[]{Opcion.SUBIDA_CON_CONTROL, Opcion.CARGADO_AUTOMATICO_CON_CONTROL, Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(3,2, new Opcion[]{Opcion.SUBIDA_CON_CONTROL, Opcion.CARGADO_AUTOMATICO_CON_CONTROL, Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(4,1, new Opcion[]{Opcion.SUBIDA_CON_CONTROL, Opcion.CARGADO_AUTOMATICO_CON_CONTROL, Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(4,2, new Opcion[]{Opcion.SUBIDA_CON_CONTROL, Opcion.CARGADO_AUTOMATICO_CON_CONTROL, Opcion.SUBIDA_CARGADO_SIN_CONTROL});

                agregarRegla(3,3, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(3,4, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(4,3, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});
                agregarRegla(4,4, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});

                agregarRegla(5,null, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});            
                agregarRegla(7,null, new Opcion[]{Opcion.SUBIDA_CARGADO_SIN_CONTROL});                    
                */
            }
        } catch (Exception ex) {
            Logger.getLogger(ControlEnvioHogar.class.getName()).log(Level.SEVERE, null, ex);
        }
        return reglas;
    }
    
    private static void agregarRegla(
            Integer resultadoFinalHogarBD, 
            Integer resultadoFinalHogarXML  
            //OpcionEnvio[] opcionesPermitidas
        ) throws Exception {            
        
        ReglaEnvioHogar r = new ReglaEnvioHogar();
        
        Hogar hBD = new Hogar();
        hBD.setResultadoFinal(resultadoFinalHogarBD);
        
        HogarXml hXML = new HogarXml();
        hXML.setResultadoFinal(resultadoFinalHogarXML);        
     
        //r.setHogarBD(hBD);
        hXML.setHogarBD(hBD);
        r.setHogarXml(hXML);
        //r.procesarResultado();
        r.procesarOpcionesPermitidas();
        
        reglas.add(r);
    }     
}
